import moment from 'dayjs';

export const fmtTimeStamp = (timeStamp, isEasy, customType, noYears, monthDay, noMS) => {
  /**
   * @return {String} 返回根据时间戳返回格式化之后的时间
   */
  let fmtType = '';

  if (isEasy) {
    fmtType = 'YYYY-MM-DD';
  } else if (customType) {
    fmtType = customType;
  } else if (noYears) {
    fmtType = 'MM-DD HH:mm:ss';
  } else if (monthDay) {
    fmtType = 'MM-DD';
  } else if (noMS) {
    fmtType = 'YYYY-MM-DD HH';
  } else {
    fmtType = 'YYYY-MM-DD HH:mm:ss';
  }

  return timeStamp ? moment(timeStamp * 1000).format(fmtType) : '';
};

// 超过一万显示万，亿字----默认取两位数
export const filterNumberWan = (value) => {
  value = Number(value);
  const param = {};
  const k = 10000;
  const sizes = ['', '万', '亿', '万亿'];
  let i;
  if (value < k) {
    param.value = value.toFixed(2);
    param.unit = '';
  } else {
    i = Math.floor(Math.log(value) / Math.log(k));
    param.value = (value / k ** i).toFixed(2);
    param.unit = sizes[i];
  }
  return {
    value: parseFloat(param.value),
    unit: param.unit,
  };
};

// 数字转换成中文数字 万亿以内
export const generateUUID = () => {
  const timestamp = Date.now();
  const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
    const r = (Math.random() * 16) | 0;
    const v = c === 'x' ? r : (r & 0x3) | 0x8;
    return v.toString(16);
  });
  return `${uuid}-${timestamp}`;
};

/**
 * 保存图片 系统权限提示，兼容用户第一次拒绝后 不再提示用户授权的情况
 * saveImg 保存图片的方法
 */
export const handleCheckSetting = (saveImg) => {
  wx.getSetting({
    success: (res) => {
      if (res.authSetting['scope.writePhotosAlbum']) {
        // 已经获得授权，直接存储
        saveImg();
      } else if (res.authSetting['scope.writePhotosAlbum'] === undefined) {
        // 第一次运行，授权未定义，可以直接保存，系统会一次性询问用户权限
        saveImg();
      } else {
        // 用户拒绝授权后，再次点击保存，咱们给直接打开设置页可以看到权限提示开关
        wx.openSetting({
          success: (res) => {
            // 用户授权
            if (res.authSetting['scope.writePhotosAlbum']) {
              saveImg();
            } else {
              // 用户再次拒绝
              wx.showToast({
                title: '权限不足',
                icon: 'none',
              });
            }
          },
          fail: () => {
            wx.showToast({
              title: '设置失败',
              icon: 'none',
            });
          },
        });
      }
    },
    fail: () => {
      wx.showToast({
        title: '设置失败',
        icon: 'none',
      });
    },
  });
};
export const getCurrentPage = () => {
  const pages = getCurrentPages();
  return pages[pages.length - 1];
};

/**
 * @description 跳转到抖老板小程序
 * @param {String} path
 */
export const navigateDlbMini = (path) => {
  console.log(path, 2637623);
};

/**
 * 违禁词检测
 * @param {Array} violateList 违禁词列表
 * @param {string} value 待检测文本
 * @returns 检测结果
 */
export const splitByViolations = (violateList, value) => {
  violateList.sort((a, b) => b.length - a.length);
  const result = [];
  let startIndex = 0;
  // 遍历value字符串
  // eslint-disable-next-line no-plusplus
  for (let i = 0; i < value.length; i++) {
    // 遍历关键字列表
    for (const key of violateList) {
      const keyword = `${key}`;
      // 检查当前位置是否匹配某个关键字的开始
      if (value.substr(i, keyword.length) === keyword) {
        if (i === startIndex || !value.substr(startIndex, keyword.length).includes(keyword)) {
          // 添加当前关键字之前的片段到结果数组
          if (i > startIndex) {
            result.push({ value: value.substr(startIndex, i - startIndex), isRed: false });
          }
          // 添加当前关键字到结果数组，并标记为违规
          result.push({ value: keyword, isRed: true });
          // 更新起始索引为当前关键字的下一个字符
          startIndex = i + keyword.length;
          // 跳出内部循环，继续检查下一个字符位置
          break;
        }
      }
    }
  }
  // 添加value字符串的最后一部分
  if (startIndex < value.length) {
    result.push({ value: value.substr(startIndex), isRed: false });
  }
  return result;
};
